package com.oa.gform.client.ui;

import java.util.Collection;

import com.oa.gform.client.validator.GValidationCallback;
import com.oa.gform.client.validator.GValidator;

public interface GField<T> extends GFieldHasValue<T>{

	/***
	 * Aggiunge un validatore alla lista dei validatori
	 * @param valdatore
	 */
	
	public void addGValidator(GValidator validator);	
	/***
	 * Aggiunge un collezione di validatori alla lista dei validatori
	 * @param collection collezione di validatori
	 */
	public void addGValidators(Collection<GValidator> collection);
	
	/***
	 * Restiuisce il nome della field
	 * @return
	 */
	public String getFieldName();


	/***
	 * Imposta il nome della field
	 * @param fieldName
	 * @return
	 */
	public void setFieldName(String fieldName);


	/***
	 * Restiuisce i nomi dei gruppi a cui appartiene la field
	 * @return
	 */
	public String[] getFieldGroupNames();

	/***
	 * Restiuisce i nomi dei gruppi a cui appartiene la field
	 * @return
	 */
	public boolean isInGroupName(String fieldGroupName);
	

	/***
	 * Imposta i nomi dei gruppi a cui appartiene una field
	 * @param fieldName
	 * @return
	 */
	public void setFieldGroupNames(String... fieldGroupName);

	/***
	 * Restituisce l'instanza della GFieldLabel associata alla field
	 * @param fieldName
	 * @return
	 */
	public GFieldLabel getGFieldLabel();
	
	/***
	 * Imposta l'instanza della GFieldLabel associata alla field
	 * @param fieldName
	 * @return
	 */
	public void setGFieldLabel(GFieldLabel gfieldLabel);
	
	/***
	 * Imposta il fuoco sull'oggetto
	 */
	public void setFocus(boolean focused);
	
	/***
	 * Imposta la field in errore
	 * @param inError
	 */
	public void setInError(boolean inError);
	
	/***
	 * Invoca i validazione della field
	 * @param inError
	 */
	public void Validate(GValidationCallback gValidationCallback);
	
	
	/***
	 * Reiposta il valore della field con il valore di default
	 * @param inError
	 */
	public void reset();
	
	
	
}
